package edu.gduf.service.impl;

import edu.gduf.dao.UserDao;
import edu.gduf.domain.ResultInfo;
import edu.gduf.domain.User;
import edu.gduf.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 谢佳豪
 * @data 2020/9/11 - 21:30
 * @target user表的业务类
 */
@Service
public class UserServiceImpl implements UserService {

    /**
     * 规定一页显示数据的条数为5
     */

    private Integer pageSize = 5;

    private UserDao userDao;

    @Resource
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public ResultInfo pageQuery(Integer pageIndex) {
        List<User> userList = userDao.pageQuery(pageSize, pageIndex);
        if (userList.size() < 0) {
            return ResultInfo.failInfo("数据查询失败，请联系开发人员！");
        }
        //用户总数量
        Integer totalNumber = userDao.totalNumber();
        //计算总页数
        Integer pageCount = (totalNumber % pageSize) != 0 ? (totalNumber / pageSize) + 1 : (totalNumber / pageSize);
        //声明返回页面数据集合
        Map<String, Object> pageDataMap = new HashMap<>();
        //将总页数、当前页用户数据存放在pageDataMap中
        pageDataMap.put("pageCount", pageCount);
        pageDataMap.put("userList", userList);

        return ResultInfo.successInfo("当前页面用户数据查询成功！", pageDataMap);
    }

    @Override
    public ResultInfo login(String username, String password, HttpSession httpSession) {
        User user = userDao.findUser(username);
        if (user == null) {
            return ResultInfo.failInfo("用户名错误！请检查用户名是否填写正确！");
        } else if (!user.getPassword().equals(password)) {
            return ResultInfo.failInfo("密码错误！请检查密码是否填写正确！");
        }

        //将登录用户loginUser存放在httpSession域中
        httpSession.setAttribute("loginUser", user);

        //声明返回页面数据集合
        Map<String, Object> loginDataMap = new HashMap<>();
        //将用户名存放在集合中
        loginDataMap.put("username", user.getUsername());

        return ResultInfo.successInfo("登录成功！", loginDataMap);
    }

    @Override
    public ResultInfo addUser(User user, HttpSession httpSession) {
        //判断当前使用用户的权限
        User loginUser = (User) httpSession.getAttribute("loginUser");
        if (loginUser.getRoot() != 1) {
            return ResultInfo.failInfo("你没有添加用户信息的权限！");
        }

        //根据username查询用户信息，检查是否存在username重复
        if (userDao.findUser(user.getUsername()) != null) {
            return ResultInfo.failInfo("存在重复用户名！请检查用户名的正确性！");
        }
        Boolean result = userDao.addUser(user);
        if (!result) {
            return ResultInfo.failInfo("添加用户失败，请检查所添加的用户信息正确！");
        }

        return ResultInfo.successInfo("添加用户数据成功！");
    }

    @Override
    public ResultInfo byIdDeleteUser(int id, HttpSession httpSession) {
        //判断当前使用用户的权限
        User loginUser = (User) httpSession.getAttribute("loginUser");
        if (loginUser.getRoot() != 1) {
            return ResultInfo.failInfo("你没有删除用户信息的权限！");
        }

        Boolean result = userDao.byIdDeleteUser(id);
        if (!result) {
            return ResultInfo.failInfo("删除用户数据失败，请检查用户数据的正确性！");
        }
        return ResultInfo.successInfo("删除用户数据成功！");
    }

    @Override
    public ResultInfo updateUser(User user, HttpSession httpSession) {
        //判断当前使用用户的权限
        User loginUser = (User) httpSession.getAttribute("loginUser");
        if (loginUser.getRoot() != 1) {
            return ResultInfo.failInfo("你没有修改用户信息的权限！");
        }

        Boolean result = userDao.updateUser(user);
        if (!result) {
            return ResultInfo.failInfo("修改用户数据失败，请检查用户数据的正确性！");
        }
        return ResultInfo.successInfo("修改用户数据成功！");
    }
}
